#!/bin/bash

# OpenBMC D-Bus接口分析工具快速启动脚本
# 作者: openUBMC社区

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 打印带颜色的消息
print_message() {
    local color=$1
    local message=$2
    echo -e "${color}${message}${NC}"
}

# 检查依赖
check_dependencies() {
    print_message $BLUE "检查依赖..."
    
    if ! command -v python3 &> /dev/null; then
        print_message $RED "错误: 未找到python3"
        exit 1
    fi
    
    if ! command -v git &> /dev/null; then
        print_message $RED "错误: 未找到git"
        exit 1
    fi
    
    print_message $GREEN "✓ 依赖检查通过"
}

# 设置环境
setup_environment() {
    print_message $BLUE "设置Python环境..."
    
    # 检查虚拟环境
    if [ ! -d "venv" ]; then
        print_message $YELLOW "创建Python虚拟环境..."
        python3 -m venv venv
    fi
    
    # 激活虚拟环境
    source venv/bin/activate
    
    # 安装依赖
    if [ -f "requirements.txt" ]; then
        print_message $BLUE "安装Python依赖..."
        pip install -q -r requirements.txt
    fi
    
    print_message $GREEN "✓ 环境设置完成"
}

# 获取OpenBMC代码
get_openbmc_code() {
    print_message $BLUE "获取OpenBMC代码..."
    
    # 克隆phosphor-dbus-interfaces
    if [ ! -d "phosphor-dbus-interfaces" ]; then
        print_message $YELLOW "克隆phosphor-dbus-interfaces仓库..."
        git clone https://github.com/openbmc/phosphor-dbus-interfaces.git
    else
        print_message $YELLOW "更新phosphor-dbus-interfaces仓库..."
        cd phosphor-dbus-interfaces
        git pull
        cd ..
    fi
    
    print_message $GREEN "✓ OpenBMC代码获取完成"
}

# 运行分析
run_analysis() {
    local output_file="${1:-openbmc_interfaces_$(date +%Y%m%d_%H%M%S).xlsx}"
    local options="${2:-}"
    
    print_message $BLUE "开始分析D-Bus接口..."
    print_message $YELLOW "输出文件: $output_file"
    
    # 激活虚拟环境
    source venv/bin/activate
    
    # 运行分析
    python analyze_dbus.py \
        --phosphor-path ./phosphor-dbus-interfaces \
        --output "$output_file" \
        $options
    
    if [ $? -eq 0 ]; then
        print_message $GREEN "✓ 分析完成!"
        print_message $GREEN "输出文件: $output_file"
        
        # 显示文件信息
        if [ -f "$output_file" ]; then
            file_size=$(ls -lh "$output_file" | awk '{print $5}')
            print_message $BLUE "文件大小: $file_size"
        fi
    else
        print_message $RED "✗ 分析失败"
        exit 1
    fi
}

# 显示帮助
show_help() {
    cat << EOF
OpenBMC D-Bus接口分析工具快速启动脚本

用法:
    $0 [命令] [选项]

命令:
    setup       - 仅设置环境和获取代码
    analyze     - 运行完整分析（默认）
    public      - 仅分析公共接口
    debug       - 调试模式分析
    help        - 显示此帮助

选项:
    -o FILE     - 指定输出文件名
    -v          - 详细模式

示例:
    $0                      # 运行完整分析
    $0 analyze -o my.xlsx   # 指定输出文件
    $0 public               # 仅分析公共接口
    $0 debug -v             # 调试模式
    $0 setup                # 仅设置环境

EOF
}

# 主函数
main() {
    local command="${1:-analyze}"
    local output_file=""
    local verbose=false
    local options=""
    
    # 解析参数
    shift
    while [[ $# -gt 0 ]]; do
        case $1 in
            -o|--output)
                output_file="$2"
                shift 2
                ;;
            -v|--verbose)
                verbose=true
                shift
                ;;
            -h|--help)
                show_help
                exit 0
                ;;
            *)
                print_message $RED "未知参数: $1"
                show_help
                exit 1
                ;;
        esac
    done
    
    # 设置详细模式
    if [ "$verbose" = true ]; then
        options="$options --log-level DEBUG"
    fi
    
    # 执行命令
    case $command in
        setup)
            check_dependencies
            setup_environment
            get_openbmc_code
            ;;
        analyze)
            check_dependencies
            setup_environment
            get_openbmc_code
            run_analysis "$output_file" "$options"
            ;;
        public)
            check_dependencies
            setup_environment
            get_openbmc_code
            run_analysis "$output_file" "$options --public-only"
            ;;
        debug)
            check_dependencies
            setup_environment
            get_openbmc_code
            run_analysis "$output_file" "$options --log-level DEBUG --validate"
            ;;
        help)
            show_help
            ;;
        *)
            print_message $RED "未知命令: $command"
            show_help
            exit 1
            ;;
    esac
}

# 运行主函数
main "$@"
